<?php

/**
 * 获取一个get参数
 *
 * @param string $param 参数名
 * @param string $default 默认值，默认为空字符串
 * @return string 安全过滤以后的get参数的值
 */
function get(string $param, string $default = '') {
    $param = $_GET[$param] ?? $default;
    return trim($param);
}

/**
 * 获取一个post参数
 *
 * @param string $param 参数名
 * @param string $default 默认值，默认为空字符串
 * @return string 安全过滤以后的post参数的值
 */
function post(string $param, string $default = '') {
    $param = $_POST[$param] ?? $default;
    return trim($param);
}

/**
 * 从http请求头中获取auth源串，并转换为array
 *
 * @return array
 */
function auth() {

   // 取auth源串
   $auth = $_SERVER['HTTP_AUTHORIZATION'] ?? '';

   // 如果没有源串，则返回请求格式不正确
   if (empty($auth)) {
       End::eDanger('请求格式不正确！');
   }

   // 将auth源串转换为array，并赋值给this->auth
   try {

       // 将auth源串转换为数组，并检查数组中的字段是否全部存在
       $arr = json_decode($auth, true);

       // 如果字段不符合标准，则返回请求格式不正确
       if (
           empty($arr['keycode']) || 
           empty($arr['appname']) || 
           empty($arr['platform']) ||
           empty($arr['version']) ||
           empty($arr['arrive']) ||
           empty($arr['username']) ||
           empty($arr['password'])
       ) {
           End::eDanger('请求格式不正确3！');
       }

       // 返回arr
       return $arr;
   } 
   
   // 捕获到异常（无法将auth源串转换为array格式，即auth源串不是json格式字符串）
   catch (Exception $e) {
       End::eDanger('请求格式不正确02！');
   }
}

/**
 * 取13位时间戳
 *
 * @return int
 */
function time13() {
    return round(microtime(true), 3) * 1000;
}

/**
 * 取14位时间戳
 *
 * @return int
 */
function time16() {
    list($msec, $sec) = explode(' ', microtime());
    return $sec * 1000000 + intval($msec * 1000000);
}

/**
 * 计算效率
 *
 * @param integer $start 开始时间戳（16位）
 * @param integer $end 结束时间戳（16位）
 * @return float
 */
function effect(int $end, int $start) {
    $effect = ($end - $start);
    if ($start > 10000000000) return $effect / 1000000;
    return $effect / 1000;
}

/**
 * 将xml转换为数组
 *
 * @param string $src 需要转换为数组的xml原始字符串
 * @return array 
 */
function xml_decode(string $src) {
    return (array)new SimpleXMLElement(LString::trim_inner($src), LIBXML_NOCDATA);
}

/**
 * 将数组转换为xml字符串
 *
 * @param array $src 需要转换为xml字符串的原始数组
 * @return string 
 */
function xml_encode(array $src) {
    $result = '<xml>';
    foreach ($src as $k=>$v) {
        $result .= "<${k}>";
        $result .= "<![CDATA[${v}]]>";
        $result .= "</${k}>";
    }
    $result .= '</xml>';
    return $result;
}

